package cn.nr19.jian.`object`

import cn.nr19.jian.J2Utils
import cn.nr19.jian.exception.ParserException
import cn.nr19.jian.Jian
import cn.nr19.jian.OnJianParserListener
import cn.nr19.jian.token.J2Node
import cn.nr19.jian.token.NFunNode


/**
 * 功能类接口
 */
interface JianLeiApi {

    // baseUrl
    fun getBaseUrl(url : String) : String{
        return url
    }

    /**
     * 获取相对于本类的文件路径
     */
    fun getFileAbsPath(path: String): String{
        return path
    }

    /**
     * 直接执行简内置功能
     */
     fun pJianSystemFun(name : String, vararg pars : Any):Any?{

        // 其他参数
        when(name){
            "监听" -> {
                if (pars.size == 2 && pars[0] is String && pars[1] is J2Node){
                    addListener(pars[0].toString(),pars[1] as J2Node)
                    return true
                }else{
                    J2Utils.log("监听2",pars.size,pars[0],pars[1])
                }
            }
            else -> {

            }
        }

        try {
            return Jian.def().pFun(this,name,pars.toList())
        }
        catch (e : ParserException){
            throw e
        }
        catch (e : Exception){
            J2Utils.log("eee",e.message)
            return null
        }
    }

    // ***********************************************
    // **************** 类基本数据读写 *****************
    fun getVar(key : String) : Any?
    fun getFun(name : String, pars : List<Any>) : NFunNode?
    fun getEvent(name : String, parsSize : Int) : J2Node?
    fun vars() : Map<String,Any> // 获取所有var
    fun curLeiVars(): HashMap<String,Any> // 仅当前类
    fun events() : Map<String,J2Node>
    fun funs() : List<NFunNode>
    fun setParserListener(listener: Any){
        setConf("parser_listener",listener)
    }
    fun getParserListener():OnJianParserListener?{
        try {
            return getConf("parser_listener") as OnJianParserListener
        }catch (e : Exception){
            return null
        }
    }

    // 给继承者的节点。比如设置  x,y 。 建议仅使用小写命名key
    fun setConf(key: String, value : Any){}
    fun getConf(key : String) : Any?{return null}


    // 变量创建
    fun createVar(name : String, value : Any){}

    // 变量赋值
    fun setVar(name: String,value: Any)

    // 功能
    open fun addFun(f : NFunNode){}
    open fun addImport(name : String,path : String){}

    // 类.事件 f.name 事件名
    fun addListener(name : String, j2 : J2Node)


    // **********************************************************
    // ************** 对象操作应继承 *******************************

    // 类结束
    fun onKill(){}
    fun onPause(){}
    fun onResume(){}
    fun onStart(){}
}